/**
 * 语言管理工具
 * 统一处理应用的语言切换逻辑
 */

// 支持的语言列表
export const SUPPORTED_LANGUAGES = [
  { name: "简体中文", code: "zh" },
  { name: "Tiếng Việt", code: "vn" },
  { name: "English", code: "en" },
];

// 默认语言
export const DEFAULT_LANGUAGE = "zh";

// 本地存储键名
export const LANGUAGE_STORAGE_KEY = "selectedLanguage";

/**
 * 检测设备语言并返回对应的应用语言
 * @returns {string} 语言代码
 */
export const detectDeviceLanguage = () => {
  try {
    // 获取设备语言设置
    const systemInfo = uni.getSystemInfoSync();
    const deviceLanguage = systemInfo.language || systemInfo.locale || "";

    console.log("设备语言:", deviceLanguage);

    // 将设备语言转换为小写进行匹配
    const lowerDeviceLanguage = deviceLanguage.toLowerCase();

    // 英文语言匹配
    if (lowerDeviceLanguage.includes("en")) {
      return "en";
    }

    // 越南语匹配
    if (
      lowerDeviceLanguage.includes("vi") ||
      lowerDeviceLanguage.includes("vn")
    ) {
      return "vn";
    }

    // 中文或其他语言默认返回中文
    return "zh";
  } catch (error) {
    console.error("检测设备语言失败:", error);
    return DEFAULT_LANGUAGE;
  }
};

/**
 * 获取当前保存的语言设置
 * @returns {string} 语言代码
 */
export const getSavedLanguage = () => {
  return uni.getStorageSync(LANGUAGE_STORAGE_KEY) || null;
};

/**
 * 保存语言设置到本地存储
 * @param {string} languageCode 语言代码
 */
export const saveLanguage = (languageCode) => {
  uni.setStorageSync(LANGUAGE_STORAGE_KEY, languageCode);
};

/**
 * 切换应用语言
 * @param {string} languageCode 语言代码
 * @param {object} i18n vue-i18n实例
 */
export const switchLanguage = (languageCode, i18n) => {
  // 更新i18n语言
  if (i18n && i18n.global) {
    i18n.global.locale.value = languageCode;
  }

  // 保存到本地存储
  saveLanguage(languageCode);

  // 发送全局事件通知其他页面语言已切换
  uni.$emit("languageChanged", languageCode);

  console.log(`语言已切换为: ${languageCode}`);
};

/**
 * 获取语言名称
 * @param {string} languageCode 语言代码
 * @returns {string} 语言名称
 */
export const getLanguageName = (languageCode) => {
  const language = SUPPORTED_LANGUAGES.find(
    (lang) => lang.code === languageCode
  );
  return language ? language.name : languageCode;
};

/**
 * 初始化语言设置
 * @param {object} i18n vue-i18n实例
 * @returns {string} 当前语言代码
 */
export const initLanguage = (i18n) => {
  let currentLanguage = getSavedLanguage();

  // 如果没有保存的语言设置，则根据设备语言自动设置
  if (!currentLanguage) {
    currentLanguage = detectDeviceLanguage();
    // 保存检测到的语言设置
    saveLanguage(currentLanguage);
    console.log(`首次启动，根据设备语言自动设置为: ${currentLanguage}`);
  }

  if (i18n && i18n.global) {
    i18n.global.locale.value = currentLanguage;
  }

  return currentLanguage;
};
